From 4335eece9bda11a37cb75f184cde82acc951ff1c Mon Sep 17 00:00:00 2001 From: Jimi Xenidis Date: Wed, 18 Oct 2006 11:29:57 -0400 Subject: [PATCH] [TOOLS][POWERPC] oops, forgot load_elf_kernel() Signed-off-by: Jimi Xenidis Signed-off-by: Hollis Blanchard --HG-- extra : transplant_source : %EC%E7%03%7Cr%C6%B7%94N%DE%22a%EC%1F%E9%9C%14%89%CF%F4 --- tools/libxc/powerpc64/utils.c | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tools/libxc/powerpc64/utils.c b/tools/libxc/powerpc64/utils.c index f8e693be88..9835f10891 100644 --- a/tools/libxc/powerpc64/utils.c +++ b/tools/libxc/powerpc64/utils.c @@ -160,3 +160,52 @@ void *load_file(const char *path, unsigned long *filesize) close(fd); return img; } + +int load_elf_kernel( + int xc_handle, + int domid, + const char *kernel_path, + struct domain_setup_info *dsi, + xen_pfn_t *page_array) +{ + struct load_funcs load_funcs; + char *kernel_img; + unsigned long kernel_size; + int rc; + + /* load the kernel ELF file */ + kernel_img = load_file(kernel_path, &kernel_size); + if (kernel_img == NULL) { + rc = -1; + goto out; + } + + DPRINTF("probe_elf\n"); + rc = probe_elf(kernel_img, kernel_size, &load_funcs); + if (rc < 0) { + rc = -1; + printf("%s is not an ELF file\n", kernel_path); + goto out; + } + + DPRINTF("parseimage\n"); + rc = (load_funcs.parseimage)(kernel_img, kernel_size, dsi); + if (rc < 0) { + rc = -1; + goto out; + } + + DPRINTF("loadimage\n"); + (load_funcs.loadimage)(kernel_img, kernel_size, xc_handle, domid, + page_array, dsi); + + DPRINTF(" v_start %016"PRIx64"\n", dsi->v_start); + DPRINTF(" v_end %016"PRIx64"\n", dsi->v_end); + DPRINTF(" v_kernstart %016"PRIx64"\n", dsi->v_kernstart); + DPRINTF(" v_kernend %016"PRIx64"\n", dsi->v_kernend); + DPRINTF(" v_kernentry %016"PRIx64"\n", dsi->v_kernentry); + +out: + free(kernel_img); + return rc; +} -- 2.30.2